#pragma once 

#ifndef SKYBOX_H
#define SKYBOX_H

#include "Eigen/Geometry"

using namespace Eigen;

const float UNIT_SIZE = 1.0f;

class Wall 
{
	Vector3f position;
	Vector3f scale;
	Vector3f color;
	float angle;
	unsigned int texId;

public:
	const Vector3f* getPosition(void)const;
	void setPosition(const Vector3f& Position);
	void setPosition(const float x, const float y, const float z);

	const Vector3f* getScale(void)const;
	void setScale(const Vector3f& Scale);
	void setScale(const float x, const float y, const float z);

	const Vector3f* getColor(void)const;
	void setColor(const Vector3f& Color);
	void setColor(const float red, const float green, const float blue);

	Wall();
	Wall(float positionX,float positionY,float positionZ,
		 float scaleX,float scaleY, float scaleZ,
		 float red,float green,float blue,
		 float _angle, unsigned int _texId);

	Wall(Vector3f& Position, Vector3f& Scale, Vector3f& Color, float _angle, unsigned int _texId);

	void Draw(bool floor);
	void Rotate(float _angle);
	void setAngle(float _angle);
	float getAngle();
	void setTexId(unsigned int _texId);
	unsigned int getTexId();
};

inline const Vector3f* Wall::getPosition(void)const 
{
	return &position;
}

inline void Wall::setPosition(const Vector3f& Position)
{
	position = Position;
}

inline void Wall::setPosition(const float x, const float y, const float z)
{
	position[0] = x;
	position[1] = y;
	position[2] = z;
}

inline const Vector3f* Wall::getScale(void)const 
{
	return &scale;
}

inline void Wall::setScale(const Vector3f& Scale)
{
	scale = Scale;
}

inline void Wall::setScale(const float x, const float y, const float z)
{
	scale[0] = x;
	scale[1] = y;
	scale[2] = z;
}

inline const Vector3f* Wall::getColor(void)const 
{
	return &color;
}

inline void Wall::setColor(const Vector3f& Color)
{
	color = Color;
}

inline void Wall::setColor(const float red, const float green, const float blue)
{
	color[0] = red;
	color[1] = green;
	color[2] = blue;
}

inline void Wall::setAngle(float _angle)
{
	angle = _angle;
}

inline float Wall::getAngle()
{
	return angle;
}

inline void Wall::setTexId( unsigned int _texId)
{
	texId = _texId;
}

inline unsigned int Wall::getTexId()
{
	return texId;
}

#endif